#include <CpLog.h>
#include "CpPolynom3D.h"
#include <TMath.h>

ClassImp(CpPolynom3D);

//______________________________________________________________________________
CpPolynom3D::CpPolynom3D(): TObject() {
//
// Constructor
//

  CpDebug(CpLog::kDebug + 5, "<-");
  CpDebug(CpLog::kDebug + 5, "->");

}

//______________________________________________________________________________
CpPolynom3D::~CpPolynom3D() {
//
// Destructor.
//
  CpDebug(CpLog::kDebug + 5, "<-");
  CpDebug(CpLog::kDebug + 5, "->");
}

//______________________________________________________________________________
Int_t CpPolynom3D::GetNumberOfParameters(Int_t grade) {
//
// Gets Number of parameters
//
  //     CpDebug(CpLog::kDebug+5,"<-");
  switch (grade) {
    case 0:  return 1;
    case 1:  return 4;
    case 2:  return 10;
    case 3:  return 20;
    case 4:  return 35;
    case 5:  return 56;
    case 6:  return 84;
    case 7:  return 120;
    case 8:  return 165;
    case 9:  return 220;
    case 10: return 286;
    //     case 11: return 12;
    default : return -1;
    
  }
  
  //     CpDebug(CpLog::kDebug+5,"->");
}


Double_t CpPolynom3D::DoPolynom0(Double_t* x, Double_t* par) {
  Double_t r = par[0] + x[0] * 0;
  return r;
}


Double_t CpPolynom3D::DoPolynom1(Double_t* x, Double_t* par) {
  Double_t r = DoPolynom0(x, par);;
  r += par[1] * TMath::Power(x[0], 1);
  r += par[2] * TMath::Power(x[1], 1);
  r += par[3] * TMath::Power(x[2], 1);
  return r;
}


Double_t CpPolynom3D::DoPolynom2(Double_t* x, Double_t* par) {
  Double_t r = DoPolynom1(x, par);

  // x^2 y^2 z^2
  r += par[4] * TMath::Power(x[0], 2);
  r += par[5] * TMath::Power(x[1], 2);
  r += par[6] * TMath::Power(x[2], 2);

  // x*y y*z z*x
  r += par[7] * TMath::Power(x[0], 1) * TMath::Power(x[1], 1);
  r += par[8] * TMath::Power(x[1], 1) * TMath::Power(x[2], 1);
  r += par[9] * TMath::Power(x[2], 1) * TMath::Power(x[0], 1);

  return r;
}


Double_t CpPolynom3D::DoPolynom3(Double_t* x, Double_t* par) {
  Double_t r = DoPolynom2(x, par);

  // x^3 y^3 z^3
  r += par[10] * TMath::Power(x[0], 3);
  r += par[11] * TMath::Power(x[1], 3);
  r += par[12] * TMath::Power(x[2], 3);

  // x^2*y x*y^2 y^2*z y*z^2 z^2*x z*x^2 x*y*z
  r += par[13] * TMath::Power(x[0], 2) * TMath::Power(x[1], 1);
  r += par[14] * TMath::Power(x[0], 1) * TMath::Power(x[1], 2);
  r += par[15] * TMath::Power(x[1], 2) * TMath::Power(x[2], 1);
  r += par[16] * TMath::Power(x[1], 1) * TMath::Power(x[2], 2);
  r += par[17] * TMath::Power(x[2], 2) * TMath::Power(x[0], 1);
  r += par[18] * TMath::Power(x[2], 1) * TMath::Power(x[0], 2);

  r += par[19] * TMath::Power(x[0], 1) * TMath::Power(x[1], 1) * TMath::Power(x[2], 1);

  return r;
}


Double_t CpPolynom3D::DoPolynom4(Double_t* x, Double_t* par) {
  Double_t r = DoPolynom3(x, par);

  // x^4 y^4 z^4
  r += par[20] * TMath::Power(x[0], 4);
  r += par[21] * TMath::Power(x[1], 4);
  r += par[22] * TMath::Power(x[2], 4);

  //x^3*y x^3*z y^3*z y^3*x z^3*y z^3*x x^2*y^2 y^2*z^2 z^2*x^2 x^2*y*z y^2*x*z z^2*x*y
  r += par[23] * TMath::Power(x[0], 3) * TMath::Power(x[1], 1);
  r += par[24] * TMath::Power(x[0], 3) * TMath::Power(x[2], 1);
  r += par[25] * TMath::Power(x[1], 3) * TMath::Power(x[2], 1);
  r += par[26] * TMath::Power(x[1], 3) * TMath::Power(x[0], 1);
  r += par[27] * TMath::Power(x[2], 3) * TMath::Power(x[1], 1);
  r += par[28] * TMath::Power(x[2], 3) * TMath::Power(x[0], 1);
  r += par[29] * TMath::Power(x[0], 2) * TMath::Power(x[1], 2);
  r += par[30] * TMath::Power(x[1], 2) * TMath::Power(x[2], 2);
  r += par[31] * TMath::Power(x[2], 2) * TMath::Power(x[0], 2);
  r += par[32] * TMath::Power(x[0], 2) * TMath::Power(x[1], 1) * TMath::Power(x[2], 1);
  r += par[33] * TMath::Power(x[1], 2) * TMath::Power(x[0], 1) * TMath::Power(x[2], 1);
  r += par[34] * TMath::Power(x[2], 2) * TMath::Power(x[0], 1) * TMath::Power(x[1], 1);

  return r;

}


Double_t CpPolynom3D::DoPolynom5(Double_t* x, Double_t* par) {
  Double_t r = DoPolynom4(x, par);
  // x^5 y^5 z^5
  r += par[35] * TMath::Power(x[0], 5);
  r += par[36] * TMath::Power(x[1], 5);
  r += par[37] * TMath::Power(x[2], 5);

  //x^4*y x^4*z y^4*z y^4*x z^4*y z^4*x x^3*y^2 x^2*y^3 y^3*z^2 y^2*z^3 z^3*x^2 z^2*x^3 x^3*y*z
  //y^3*x*z z^3*x*y x^2*y^2*z x^2*y*z^2 y^2*z^2*x
  r += par[38] * TMath::Power(x[0], 4) * TMath::Power(x[1], 1);
  r += par[39] * TMath::Power(x[0], 4) * TMath::Power(x[2], 1);
  r += par[40] * TMath::Power(x[1], 4) * TMath::Power(x[2], 1);
  r += par[41] * TMath::Power(x[1], 4) * TMath::Power(x[0], 1);
  r += par[42] * TMath::Power(x[2], 4) * TMath::Power(x[1], 1);
  r += par[43] * TMath::Power(x[2], 4) * TMath::Power(x[0], 1);
  r += par[44] * TMath::Power(x[0], 3) * TMath::Power(x[1], 2);
  r += par[45] * TMath::Power(x[0], 2) * TMath::Power(x[1], 3);
  r += par[46] * TMath::Power(x[1], 3) * TMath::Power(x[2], 2);
  r += par[47] * TMath::Power(x[1], 2) * TMath::Power(x[2], 3);
  r += par[48] * TMath::Power(x[2], 3) * TMath::Power(x[0], 2);
  r += par[49] * TMath::Power(x[2], 2) * TMath::Power(x[0], 3);
  r += par[50] * TMath::Power(x[0], 3) * TMath::Power(x[1], 1) * TMath::Power(x[2], 1);
  r += par[51] * TMath::Power(x[1], 3) * TMath::Power(x[0], 1) * TMath::Power(x[2], 1);
  r += par[52] * TMath::Power(x[2], 3) * TMath::Power(x[0], 1) * TMath::Power(x[1], 1);
  r += par[53] * TMath::Power(x[0], 2) * TMath::Power(x[1], 2) * TMath::Power(x[2], 1);
  r += par[54] * TMath::Power(x[0], 2) * TMath::Power(x[1], 1) * TMath::Power(x[2], 2);
  r += par[55] * TMath::Power(x[1], 2) * TMath::Power(x[2], 2) * TMath::Power(x[0], 1);

  return r;
}


Double_t CpPolynom3D::DoPolynom6(Double_t* x, Double_t* par) {
  Double_t r = DoPolynom5(x, par);
  // x^6 y^6 z^6
  r += par[56] * TMath::Power(x[0], 6);
  r += par[57] * TMath::Power(x[1], 6);
  r += par[58] * TMath::Power(x[2], 6);

  //x^5*y x^5*z y^5*z y^5*x z^5*y z^5*x x^4*y^2 x^2*y^4 y^4*z^2 y^2*z^4 z^4*x^2 z^2*x^4 x^3*y^3 x^3*z^3
  //y^3*z^3 x^4*y*z y^4*z*x z^4*x*y x^3*y^2*z x^3*y*z^2 y^3*z^2*x y^3*z*x^2 z^3*x^2*y z^3*x*y^2 x^2*y^2*z^2
  r += par[59] * TMath::Power(x[0], 5) * TMath::Power(x[1], 1);
  r += par[60] * TMath::Power(x[0], 5) * TMath::Power(x[2], 1);
  r += par[61] * TMath::Power(x[1], 5) * TMath::Power(x[2], 1);
  r += par[62] * TMath::Power(x[1], 5) * TMath::Power(x[0], 1);
  r += par[63] * TMath::Power(x[2], 5) * TMath::Power(x[1], 1);
  r += par[64] * TMath::Power(x[2], 5) * TMath::Power(x[0], 1);
  r += par[65] * TMath::Power(x[0], 4) * TMath::Power(x[1], 2);
  r += par[66] * TMath::Power(x[0], 2) * TMath::Power(x[1], 4);
  r += par[67] * TMath::Power(x[1], 4) * TMath::Power(x[2], 2);
  r += par[68] * TMath::Power(x[1], 2) * TMath::Power(x[2], 4);
  r += par[69] * TMath::Power(x[2], 4) * TMath::Power(x[0], 2);
  r += par[70] * TMath::Power(x[2], 2) * TMath::Power(x[0], 4);
  r += par[71] * TMath::Power(x[0], 3) * TMath::Power(x[1], 3);
  r += par[72] * TMath::Power(x[0], 3) * TMath::Power(x[2], 3);
  r += par[73] * TMath::Power(x[1], 3) * TMath::Power(x[2], 3);
  r += par[74] * TMath::Power(x[0], 4) * TMath::Power(x[1], 1) * TMath::Power(x[2], 1);
  r += par[75] * TMath::Power(x[1], 4) * TMath::Power(x[0], 1) * TMath::Power(x[2], 1);
  r += par[76] * TMath::Power(x[2], 4) * TMath::Power(x[0], 1) * TMath::Power(x[1], 1);
  r += par[77] * TMath::Power(x[0], 3) * TMath::Power(x[1], 2) * TMath::Power(x[2], 1);
  r += par[78] * TMath::Power(x[0], 3) * TMath::Power(x[1], 1) * TMath::Power(x[2], 2);
  r += par[79] * TMath::Power(x[1], 3) * TMath::Power(x[2], 2) * TMath::Power(x[0], 1);
  r += par[80] * TMath::Power(x[1], 3) * TMath::Power(x[2], 1) * TMath::Power(x[0], 2);
  r += par[81] * TMath::Power(x[2], 3) * TMath::Power(x[0], 2) * TMath::Power(x[1], 1);
  r += par[82] * TMath::Power(x[2], 3) * TMath::Power(x[0], 1) * TMath::Power(x[1], 2);
  r += par[83] * TMath::Power(x[0], 2) * TMath::Power(x[1], 2) * TMath::Power(x[2], 2);

  return r;
}


Double_t CpPolynom3D::DoPolynom7(Double_t* x, Double_t* par) {
  Double_t r = DoPolynom6(x, par);
  // x^7 y^7 z^7
  r += par[84] * TMath::Power(x[0], 7);
  r += par[85] * TMath::Power(x[1], 7);
  r += par[86] * TMath::Power(x[2], 7);

  // x^6*y x^6*z x^5*y*z x^4*y^3 x^4*z^3 x^4*y^2*z x^4*y*z^2 x^3*y^4 x^3*z^4 x^3*y^3*z x^3*y*z^3 x^3*y^2*z^2 x^2*y^5 x^2*z^5
  // x^2*y^4*z x^2*y*z^4 x^2*y^3*z^2 x^2*y^2*z^3 x*y^6 x*z^6 x*y^5*z x*y^4*z^2 x*y^3*z^3 x*y^2*z^4 x*y*z^5 x^5*y^2 x^5*z^2
  // y^6*z y^5*z^2 y^4*z^3 y^3*z^4 y^2*z^5 y*z^6
  r += par[87] * TMath::Power(x[0], 6) * TMath::Power(x[1], 1);
  r += par[88] * TMath::Power(x[0], 6) * TMath::Power(x[2], 1);
  r += par[89] * TMath::Power(x[0], 4) * TMath::Power(x[1], 3);
  r += par[90] * TMath::Power(x[0], 4) * TMath::Power(x[2], 3);
  r += par[91] * TMath::Power(x[0], 3) * TMath::Power(x[1], 4);
  r += par[92] * TMath::Power(x[0], 3) * TMath::Power(x[2], 4);
  r += par[93] * TMath::Power(x[0], 2) * TMath::Power(x[1], 5);
  r += par[94] * TMath::Power(x[0], 2) * TMath::Power(x[2], 5);
  r += par[95] * TMath::Power(x[0], 1) * TMath::Power(x[1], 6);
  r += par[96] * TMath::Power(x[0], 1) * TMath::Power(x[2], 6);
  r += par[97] * TMath::Power(x[0], 5) * TMath::Power(x[1], 2);
  r += par[98] * TMath::Power(x[0], 5) * TMath::Power(x[2], 2);
  r += par[99] * TMath::Power(x[1], 6) * TMath::Power(x[2], 1);
  r += par[100] * TMath::Power(x[1], 5) * TMath::Power(x[2], 2);
  r += par[101] * TMath::Power(x[1], 4) * TMath::Power(x[2], 3);
  r += par[102] * TMath::Power(x[1], 3) * TMath::Power(x[2], 4);
  r += par[103] * TMath::Power(x[1], 2) * TMath::Power(x[2], 5);
  r += par[104] * TMath::Power(x[1], 1) * TMath::Power(x[2], 6);
  r += par[105] * TMath::Power(x[0], 5) * TMath::Power(x[1], 1) * TMath::Power(x[2], 1);
  r += par[106] * TMath::Power(x[0], 4) * TMath::Power(x[1], 2) * TMath::Power(x[2], 1);
  r += par[107] * TMath::Power(x[0], 4) * TMath::Power(x[1], 1) * TMath::Power(x[2], 2);
  r += par[108] * TMath::Power(x[0], 3) * TMath::Power(x[1], 3) * TMath::Power(x[2], 1);
  r += par[109] * TMath::Power(x[0], 3) * TMath::Power(x[1], 1) * TMath::Power(x[2], 3);
  r += par[110] * TMath::Power(x[0], 3) * TMath::Power(x[1], 2) * TMath::Power(x[2], 2);
  r += par[111] * TMath::Power(x[0], 2) * TMath::Power(x[1], 4) * TMath::Power(x[2], 1);
  r += par[112] * TMath::Power(x[0], 2) * TMath::Power(x[1], 1) * TMath::Power(x[2], 4);
  r += par[113] * TMath::Power(x[0], 2) * TMath::Power(x[1], 3) * TMath::Power(x[2], 2);
  r += par[114] * TMath::Power(x[0], 2) * TMath::Power(x[1], 2) * TMath::Power(x[2], 3);
  r += par[115] * TMath::Power(x[0], 1) * TMath::Power(x[1], 5) * TMath::Power(x[2], 1);
  r += par[116] * TMath::Power(x[0], 1) * TMath::Power(x[1], 4) * TMath::Power(x[2], 2);
  r += par[117] * TMath::Power(x[0], 1) * TMath::Power(x[1], 3) * TMath::Power(x[2], 3);
  r += par[118] * TMath::Power(x[0], 1) * TMath::Power(x[1], 2) * TMath::Power(x[2], 4);
  r += par[119] * TMath::Power(x[0], 1) * TMath::Power(x[1], 1) * TMath::Power(x[2], 5);

  return r;
}


Double_t CpPolynom3D::DoPolynom8(Double_t* x, Double_t* par) {
  Double_t r = DoPolynom7(x, par);
  // x^8 y^8 z^8
  r += par[120] * TMath::Power(x[0], 8);
  r += par[121] * TMath::Power(x[1], 8);
  r += par[122] * TMath::Power(x[2], 8);

  // x^7*y x^7*z x^6*y^2 x^6*z^2 x^6*y*z x^5*y^3 x^5*z^3 x^5*y^2*z x^5*y*z^2 x^4*y^4 x^4*z^4 x^4*y^3*z x^4*y^2*z^2 x^4*y*z^3
  // x^3*y^5 x^3*z^5 x^3*y^4*z x^3*y^3*z^2 x^3*y^2*z^3 x^3*y*z^4 x^2*y^6 x^2*z^6 x^2*y^5*z x^2*y^4*z^2 x^2*y^3*z^3 x^2*y^2*z^4
  // x^2*y*z^5 y^7*z y^6*z^2 y^5*z^3 y^4*z^4 y^3*z^5 y^2*z^6 y*z^7 x*y^7 x*y^6*z x*y^5*z^2 x*y^4*z^3 x*y^3*z^4 x*y^2*z^5
  // x*y*z^6 x*z^7
  r += par[123] * TMath::Power(x[0], 7) * TMath::Power(x[1], 1);
  r += par[124] * TMath::Power(x[0], 7) * TMath::Power(x[2], 1);
  r += par[125] * TMath::Power(x[0], 6) * TMath::Power(x[1], 2);
  r += par[126] * TMath::Power(x[0], 6) * TMath::Power(x[2], 2);
  r += par[127] * TMath::Power(x[0], 5) * TMath::Power(x[1], 3);
  r += par[128] * TMath::Power(x[0], 5) * TMath::Power(x[2], 3);
  r += par[129] * TMath::Power(x[0], 4) * TMath::Power(x[1], 4);
  r += par[130] * TMath::Power(x[0], 4) * TMath::Power(x[2], 4);
  r += par[131] * TMath::Power(x[0], 3) * TMath::Power(x[1], 5);
  r += par[132] * TMath::Power(x[0], 3) * TMath::Power(x[2], 5);
  r += par[133] * TMath::Power(x[0], 2) * TMath::Power(x[1], 6);
  r += par[134] * TMath::Power(x[0], 2) * TMath::Power(x[2], 6);
  r += par[135] * TMath::Power(x[1], 7) * TMath::Power(x[2], 1);
  r += par[136] * TMath::Power(x[1], 6) * TMath::Power(x[2], 2);
  r += par[137] * TMath::Power(x[1], 5) * TMath::Power(x[2], 3);
  r += par[138] * TMath::Power(x[1], 4) * TMath::Power(x[2], 4);
  r += par[139] * TMath::Power(x[1], 3) * TMath::Power(x[2], 5);
  r += par[140] * TMath::Power(x[1], 2) * TMath::Power(x[2], 6);
  r += par[141] * TMath::Power(x[1], 1) * TMath::Power(x[2], 7);
  r += par[142] * TMath::Power(x[0], 1) * TMath::Power(x[1], 7);
  r += par[143] * TMath::Power(x[0], 1) * TMath::Power(x[2], 7);
  r += par[144] * TMath::Power(x[0], 6) * TMath::Power(x[1], 1) * TMath::Power(x[2], 1);
  r += par[145] * TMath::Power(x[0], 5) * TMath::Power(x[1], 2) * TMath::Power(x[2], 1);
  r += par[146] * TMath::Power(x[0], 5) * TMath::Power(x[1], 1) * TMath::Power(x[2], 2);
  r += par[147] * TMath::Power(x[0], 4) * TMath::Power(x[1], 3) * TMath::Power(x[2], 1);
  r += par[148] * TMath::Power(x[0], 4) * TMath::Power(x[1], 2) * TMath::Power(x[2], 2);
  r += par[149] * TMath::Power(x[0], 4) * TMath::Power(x[1], 1) * TMath::Power(x[2], 3);
  r += par[150] * TMath::Power(x[0], 3) * TMath::Power(x[1], 4) * TMath::Power(x[2], 1);
  r += par[151] * TMath::Power(x[0], 3) * TMath::Power(x[1], 3) * TMath::Power(x[2], 2);
  r += par[152] * TMath::Power(x[0], 3) * TMath::Power(x[1], 2) * TMath::Power(x[2], 3);
  r += par[153] * TMath::Power(x[0], 3) * TMath::Power(x[1], 1) * TMath::Power(x[2], 4);
  r += par[154] * TMath::Power(x[0], 2) * TMath::Power(x[1], 5) * TMath::Power(x[2], 1);
  r += par[155] * TMath::Power(x[0], 2) * TMath::Power(x[1], 4) * TMath::Power(x[2], 2);
  r += par[156] * TMath::Power(x[0], 2) * TMath::Power(x[1], 3) * TMath::Power(x[2], 3);
  r += par[157] * TMath::Power(x[0], 2) * TMath::Power(x[1], 2) * TMath::Power(x[2], 4);
  r += par[158] * TMath::Power(x[0], 2) * TMath::Power(x[1], 1) * TMath::Power(x[2], 5);
  r += par[159] * TMath::Power(x[0], 1) * TMath::Power(x[1], 6) * TMath::Power(x[2], 1);
  r += par[160] * TMath::Power(x[0], 1) * TMath::Power(x[1], 5) * TMath::Power(x[2], 2);
  r += par[161] * TMath::Power(x[0], 1) * TMath::Power(x[1], 4) * TMath::Power(x[2], 3);
  r += par[162] * TMath::Power(x[0], 1) * TMath::Power(x[1], 3) * TMath::Power(x[2], 4);
  r += par[163] * TMath::Power(x[0], 1) * TMath::Power(x[1], 2) * TMath::Power(x[2], 5);
  r += par[164] * TMath::Power(x[0], 1) * TMath::Power(x[1], 1) * TMath::Power(x[2], 6);

  return r;
}


Double_t CpPolynom3D::DoPolynom9(Double_t* x, Double_t* par) {
  Double_t r = DoPolynom8(x, par);
  // x^9 y^9 z^9
  r += par[165] * TMath::Power(x[0], 9);
  r += par[166] * TMath::Power(x[1], 9);
  r += par[167] * TMath::Power(x[2], 9);
  // x^8*y x^8*z x^7*y^2 x^7*z^2 x^6*y^3 x^6*z^3 x^6*y^2*z x^6*y*z^2 x^5*y^4 x^5*z^4 x^5*y^3*z x^5*y^2*z^2 x^5*y*z^3 x^4*y^5
  // x^4*z^5 x^4*y^4*z x^7*y*z x^4*y^3*z^2 x^4*y^2*z^3 x^4*y*z^4 x^3*y^6 x^3*z^6 x^3*y^5*z x^3*y^4*z^2 x^3*y^3*z^3 x^3*y^2*z^4
  // x^3*y*z^5 x^2*y^7 x^2*z^7 x^2*y^6*z x^2*y^5*z^2 x^2*y^4*z^3 x^2*y^3*z^4 x^2*y^2*z^5 x^2*y*z^6 x*y^8 x*z^8 x*y^7*z
  // x*y^6*z^2 x*y^5*z^3 x*y^4*z^4 x*y^3*z^5 x*y^2*z^6 x*y*z^7 y^8*z y^7*z^2 y^6*z^3 y^5*z^4 y^4*z^5 y^3*z^6 y^2*z^7 y*z^8
  r += par[168] * TMath::Power(x[0], 8) * TMath::Power(x[1], 1);
  r += par[169] * TMath::Power(x[0], 8) * TMath::Power(x[2], 1);
  r += par[170] * TMath::Power(x[0], 7) * TMath::Power(x[1], 2);
  r += par[171] * TMath::Power(x[0], 7) * TMath::Power(x[2], 2);
  r += par[172] * TMath::Power(x[0], 6) * TMath::Power(x[1], 3);
  r += par[173] * TMath::Power(x[0], 6) * TMath::Power(x[2], 3);
  r += par[174] * TMath::Power(x[0], 5) * TMath::Power(x[1], 4);
  r += par[175] * TMath::Power(x[0], 5) * TMath::Power(x[2], 4);
  r += par[176] * TMath::Power(x[0], 4) * TMath::Power(x[1], 5);
  r += par[177] * TMath::Power(x[0], 4) * TMath::Power(x[2], 5);
  r += par[178] * TMath::Power(x[0], 3) * TMath::Power(x[1], 6);
  r += par[179] * TMath::Power(x[0], 3) * TMath::Power(x[2], 6);
  r += par[180] * TMath::Power(x[0], 2) * TMath::Power(x[1], 7);
  r += par[181] * TMath::Power(x[0], 2) * TMath::Power(x[2], 7);
  r += par[182] * TMath::Power(x[0], 1) * TMath::Power(x[1], 8);
  r += par[183] * TMath::Power(x[0], 1) * TMath::Power(x[2], 8);
  r += par[184] * TMath::Power(x[1], 8) * TMath::Power(x[2], 1);
  r += par[185] * TMath::Power(x[1], 7) * TMath::Power(x[2], 2);
  r += par[186] * TMath::Power(x[1], 6) * TMath::Power(x[2], 3);
  r += par[187] * TMath::Power(x[1], 5) * TMath::Power(x[2], 4);
  r += par[188] * TMath::Power(x[1], 4) * TMath::Power(x[2], 5);
  r += par[189] * TMath::Power(x[1], 3) * TMath::Power(x[2], 6);
  r += par[190] * TMath::Power(x[1], 2) * TMath::Power(x[2], 7);
  r += par[191] * TMath::Power(x[1], 1) * TMath::Power(x[2], 8);
  r += par[192] * TMath::Power(x[0], 6) * TMath::Power(x[1], 2) * TMath::Power(x[2], 1);
  r += par[193] * TMath::Power(x[0], 6) * TMath::Power(x[1], 1) * TMath::Power(x[2], 2);
  r += par[194] * TMath::Power(x[0], 5) * TMath::Power(x[1], 3) * TMath::Power(x[2], 1);
  r += par[195] * TMath::Power(x[0], 5) * TMath::Power(x[1], 2) * TMath::Power(x[2], 2);
  r += par[196] * TMath::Power(x[0], 5) * TMath::Power(x[1], 1) * TMath::Power(x[2], 3);
  r += par[197] * TMath::Power(x[0], 4) * TMath::Power(x[1], 4) * TMath::Power(x[2], 1);
  r += par[198] * TMath::Power(x[0], 7) * TMath::Power(x[1], 1) * TMath::Power(x[2], 1);
  r += par[199] * TMath::Power(x[0], 4) * TMath::Power(x[1], 3) * TMath::Power(x[2], 2);
  r += par[200] * TMath::Power(x[0], 4) * TMath::Power(x[1], 2) * TMath::Power(x[2], 3);
  r += par[201] * TMath::Power(x[0], 4) * TMath::Power(x[1], 1) * TMath::Power(x[2], 4);
  r += par[202] * TMath::Power(x[0], 3) * TMath::Power(x[1], 5) * TMath::Power(x[2], 1);
  r += par[203] * TMath::Power(x[0], 3) * TMath::Power(x[1], 4) * TMath::Power(x[2], 2);
  r += par[204] * TMath::Power(x[0], 3) * TMath::Power(x[1], 3) * TMath::Power(x[2], 3);
  r += par[205] * TMath::Power(x[0], 3) * TMath::Power(x[1], 2) * TMath::Power(x[2], 4);
  r += par[206] * TMath::Power(x[0], 3) * TMath::Power(x[1], 1) * TMath::Power(x[2], 5);
  r += par[207] * TMath::Power(x[0], 2) * TMath::Power(x[1], 6) * TMath::Power(x[2], 1);
  r += par[208] * TMath::Power(x[0], 2) * TMath::Power(x[1], 5) * TMath::Power(x[2], 2);
  r += par[209] * TMath::Power(x[0], 2) * TMath::Power(x[1], 4) * TMath::Power(x[2], 3);
  r += par[210] * TMath::Power(x[0], 2) * TMath::Power(x[1], 3) * TMath::Power(x[2], 4);
  r += par[211] * TMath::Power(x[0], 2) * TMath::Power(x[1], 2) * TMath::Power(x[2], 5);
  r += par[212] * TMath::Power(x[0], 2) * TMath::Power(x[1], 1) * TMath::Power(x[2], 6);
  r += par[213] * TMath::Power(x[0], 1) * TMath::Power(x[1], 7) * TMath::Power(x[2], 1);
  r += par[214] * TMath::Power(x[0], 1) * TMath::Power(x[1], 6) * TMath::Power(x[2], 2);
  r += par[215] * TMath::Power(x[0], 1) * TMath::Power(x[1], 5) * TMath::Power(x[2], 3);
  r += par[216] * TMath::Power(x[0], 1) * TMath::Power(x[1], 4) * TMath::Power(x[2], 4);
  r += par[217] * TMath::Power(x[0], 1) * TMath::Power(x[1], 3) * TMath::Power(x[2], 5);
  r += par[218] * TMath::Power(x[0], 1) * TMath::Power(x[1], 2) * TMath::Power(x[2], 6);
  r += par[219] * TMath::Power(x[0], 1) * TMath::Power(x[1], 1) * TMath::Power(x[2], 7);

  return r;
}


Double_t CpPolynom3D::DoPolynom10(Double_t* x, Double_t* par) {
  Double_t r = DoPolynom9(x, par);
  // x^10 y^10 z^10
  r += par[220] * TMath::Power(x[0], 10);
  r += par[221] * TMath::Power(x[1], 10);
  r += par[222] * TMath::Power(x[2], 10);
// x^9*y x^9*z x^8*y^2 x^8*z^2 x^7*y^3 x^7*z^3 x^6*y^4 x^6*z^4 x^5*y^5 x^5*z^5 x^4*y^6 x^4*z^6 x^3*y^7 x^3*z^7 x^2*y^8 x^2*z^8
// x*y^9 x*z^9 y^9*z y^8*z^2 y^7*z^3 y^6*z^4 y^5*z^5 y^4*z^6 y^3*z^7 y^2*z^8 y*z^9 x^8*y*z x^7*y^2*z x^7*y*z^2 x^6*y^3*z
// x^6*y^2*z^2 x^6*y*z^3 x^5*y^4*z x^5*y^3*z^2 x^5*y^2*z^3 x^5*y*z^4 x^4*y^5*z x^4*y^4*z^2 x^4*y^3*z^3 x^4*y^2*z^4 x^4*y*z^5
// x^3*y^6*z x^3*y^5*z^2 x^3*y^4*z^3 x^3*y^3*z^4 x^3*y^2*z^5 x^3*y*z^6 x^2*y^7*z x^2*y^6*z^2 x^2*y^5*z^3 x^2*y^4*z^4 x^2*y^3*z^5
// x^2*y^2*z^6 x^2*y*z^7 x*y^8*z x*y^7*z^2 x*y^6*z^3 x^y*5*z^4 x*y^4*z^5 x*y^3*z^6 x*y^2*z^7 x*y*z^8
  r += par[223] * TMath::Power(x[0], 9) * TMath::Power(x[1], 1);
  r += par[224] * TMath::Power(x[0], 9) * TMath::Power(x[2], 1);
  r += par[225] * TMath::Power(x[0], 8) * TMath::Power(x[1], 2);
  r += par[226] * TMath::Power(x[0], 8) * TMath::Power(x[2], 2);
  r += par[227] * TMath::Power(x[0], 7) * TMath::Power(x[1], 3);
  r += par[228] * TMath::Power(x[0], 7) * TMath::Power(x[2], 3);
  r += par[229] * TMath::Power(x[0], 6) * TMath::Power(x[1], 4);
  r += par[230] * TMath::Power(x[0], 6) * TMath::Power(x[2], 4);
  r += par[231] * TMath::Power(x[0], 5) * TMath::Power(x[1], 5);
  r += par[232] * TMath::Power(x[0], 5) * TMath::Power(x[2], 5);
  r += par[233] * TMath::Power(x[0], 4) * TMath::Power(x[1], 6);
  r += par[234] * TMath::Power(x[0], 4) * TMath::Power(x[2], 6);
  r += par[235] * TMath::Power(x[0], 3) * TMath::Power(x[1], 7);
  r += par[236] * TMath::Power(x[0], 3) * TMath::Power(x[2], 7);
  r += par[237] * TMath::Power(x[0], 2) * TMath::Power(x[1], 8);
  r += par[238] * TMath::Power(x[0], 2) * TMath::Power(x[2], 8);
  r += par[239] * TMath::Power(x[0], 1) * TMath::Power(x[1], 9);
  r += par[240] * TMath::Power(x[0], 1) * TMath::Power(x[2], 9);
  r += par[241] * TMath::Power(x[1], 9) * TMath::Power(x[2], 1);
  r += par[242] * TMath::Power(x[1], 8) * TMath::Power(x[2], 2);
  r += par[243] * TMath::Power(x[1], 7) * TMath::Power(x[2], 3);
  r += par[244] * TMath::Power(x[1], 6) * TMath::Power(x[2], 4);
  r += par[245] * TMath::Power(x[1], 5) * TMath::Power(x[2], 5);
  r += par[246] * TMath::Power(x[1], 4) * TMath::Power(x[2], 6);
  r += par[247] * TMath::Power(x[1], 3) * TMath::Power(x[2], 7);
  r += par[248] * TMath::Power(x[1], 2) * TMath::Power(x[2], 8);
  r += par[249] * TMath::Power(x[1], 1) * TMath::Power(x[2], 9);
  r += par[250] * TMath::Power(x[0], 8) * TMath::Power(x[1], 1) * TMath::Power(x[2], 1);
  r += par[251] * TMath::Power(x[0], 7) * TMath::Power(x[1], 2) * TMath::Power(x[2], 1);
  r += par[252] * TMath::Power(x[0], 7) * TMath::Power(x[1], 1) * TMath::Power(x[2], 2);
  r += par[253] * TMath::Power(x[0], 6) * TMath::Power(x[1], 3) * TMath::Power(x[2], 1);
  r += par[254] * TMath::Power(x[0], 6) * TMath::Power(x[1], 2) * TMath::Power(x[2], 2);
  r += par[255] * TMath::Power(x[0], 6) * TMath::Power(x[1], 1) * TMath::Power(x[2], 3);
  r += par[256] * TMath::Power(x[0], 5) * TMath::Power(x[1], 4) * TMath::Power(x[2], 1);
  r += par[257] * TMath::Power(x[0], 5) * TMath::Power(x[1], 3) * TMath::Power(x[2], 2);
  r += par[258] * TMath::Power(x[0], 5) * TMath::Power(x[1], 2) * TMath::Power(x[2], 3);
  r += par[259] * TMath::Power(x[0], 5) * TMath::Power(x[1], 1) * TMath::Power(x[2], 4);
  r += par[260] * TMath::Power(x[0], 4) * TMath::Power(x[1], 5) * TMath::Power(x[2], 1);
  r += par[261] * TMath::Power(x[0], 4) * TMath::Power(x[1], 4) * TMath::Power(x[2], 2);
  r += par[262] * TMath::Power(x[0], 4) * TMath::Power(x[1], 3) * TMath::Power(x[2], 3);
  r += par[263] * TMath::Power(x[0], 4) * TMath::Power(x[1], 2) * TMath::Power(x[2], 4);
  r += par[264] * TMath::Power(x[0], 4) * TMath::Power(x[1], 1) * TMath::Power(x[2], 5);
  r += par[265] * TMath::Power(x[0], 3) * TMath::Power(x[1], 6) * TMath::Power(x[2], 1);
  r += par[266] * TMath::Power(x[0], 3) * TMath::Power(x[1], 5) * TMath::Power(x[2], 2);
  r += par[267] * TMath::Power(x[0], 3) * TMath::Power(x[1], 4) * TMath::Power(x[2], 3);
  r += par[268] * TMath::Power(x[0], 3) * TMath::Power(x[1], 3) * TMath::Power(x[2], 4);
  r += par[269] * TMath::Power(x[0], 3) * TMath::Power(x[1], 2) * TMath::Power(x[2], 5);
  r += par[270] * TMath::Power(x[0], 3) * TMath::Power(x[1], 1) * TMath::Power(x[2], 6);
  r += par[271] * TMath::Power(x[0], 2) * TMath::Power(x[1], 7) * TMath::Power(x[2], 1);
  r += par[272] * TMath::Power(x[0], 2) * TMath::Power(x[1], 6) * TMath::Power(x[2], 2);
  r += par[273] * TMath::Power(x[0], 2) * TMath::Power(x[1], 5) * TMath::Power(x[2], 3);
  r += par[274] * TMath::Power(x[0], 2) * TMath::Power(x[1], 4) * TMath::Power(x[2], 4);
  r += par[275] * TMath::Power(x[0], 2) * TMath::Power(x[1], 3) * TMath::Power(x[2], 5);
  r += par[276] * TMath::Power(x[0], 2) * TMath::Power(x[1], 2) * TMath::Power(x[2], 6);
  r += par[277] * TMath::Power(x[0], 2) * TMath::Power(x[1], 1) * TMath::Power(x[2], 7);
  r += par[278] * TMath::Power(x[0], 1) * TMath::Power(x[1], 8) * TMath::Power(x[2], 1);
  r += par[279] * TMath::Power(x[0], 1) * TMath::Power(x[1], 7) * TMath::Power(x[2], 2);
  r += par[280] * TMath::Power(x[0], 1) * TMath::Power(x[1], 6) * TMath::Power(x[2], 3);
  r += par[281] * TMath::Power(x[0], 1) * TMath::Power(x[1], 5) * TMath::Power(x[2], 4);
  r += par[282] * TMath::Power(x[0], 1) * TMath::Power(x[1], 4) * TMath::Power(x[2], 5);
  r += par[283] * TMath::Power(x[0], 1) * TMath::Power(x[1], 3) * TMath::Power(x[2], 6);
  r += par[284] * TMath::Power(x[0], 1) * TMath::Power(x[1], 2) * TMath::Power(x[2], 7);
  r += par[285] * TMath::Power(x[0], 1) * TMath::Power(x[1], 1) * TMath::Power(x[2], 8);

  return r;
}
